package com.sentiment.tools;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Format {
	private static final Logger LOG = LoggerFactory.getLogger(Format.class);
	public static String date2String(Date date, int digit){
		SimpleDateFormat sdf = null;
		switch (digit) {
		case 6:
			sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
			break;
		case 3:
			sdf = new SimpleDateFormat("yyyy_MM_dd");
			break;
		default:
			break;
		}
		if(sdf == null){
			LOG.error("传入的位数尚未得到正确处理 返回Null");
			return null;
		}
		return sdf.format(date);
	}
	/**
	 * 截取date对象的年、月、日、时、分、秒
	 * @param date 
	 * @param digit 年月日传3，年月日时分秒传6，其他同上
	 * @return
	 */
	public static Date date2ShortDate(Date date,int digit){
		String src = date2String(date , digit);
		return string2Date(src,digit);
	}
	
	public static Date string2Date(String src, int digit){
		if(src == null)
			return null;
		src = src.replaceAll("[^0-9]", "_");
		String[] date = src.split("_");
		Calendar cal = Calendar.getInstance();
		List<Integer> li = new ArrayList<Integer>();
		
		for(String s : date){
			if(s.matches("[0-9]{1,4}"))
				li.add(Integer.parseInt(s));
		}
		if(li.size() < digit){
			digit = li.size();
		}
		switch(digit){
		case 6:
			cal.set(li.get(0), li.get(1)-1, li.get(2), li.get(3), li.get(4), li.get(5));
			break;
		case 5:
			cal.set(li.get(0), li.get(1)-1, li.get(2), li.get(3), li.get(4), 0);
			break;
		case 4:
			cal.set(li.get(0), li.get(1)-1, li.get(2), li.get(3), 0, 0);
			break;
		case 3:
			cal.set(li.get(0), li.get(1)-1,li.get(2),0,0,0);
			break;
		case 2:
			cal.set(li.get(0),li.get(1)-1,0, 0, 0,0);
			break;
		}
		
		return cal.getTime();
	}
	
	public static void main(String[] args) {
		System.out.println( GetBirth("510421199308100046"));
		
	}
	
	/**
	 * 页面上的日历插件转换为时间的方法
	 * @param str
	 * @return
	 */
	public static Date ToDate(String str){
		String []temp = str.split("/");		
		str = temp[2] + "_" + temp[0] + "_" + temp[1];		
		Date date = Format.string2Date(str, 3);
		return date;
	}
	/**
	 * 将”几小时前“转换为Date格式时间
	 * @param str
	 * @return
	 */
	public static Date beforeTime(String before){
		int num = Integer.parseInt(before.replaceAll("[^0-9]", ""));
		if(before.contains("小时")){
			//XX小时前
			return new Date(new Date().getTime() - num * 60 * 1000);
		}else{
			//XX分钟前
			return new Date(new Date().getTime() - num * 1000);
		}
	}
	
	
	/**
	 * 页面上的日历插件转换为数据库中时间的方法
	 * @param str
	 * @return
	 */
	public static String ToDBStrDate(String str){
		String []temp = str.split("/");		
		str = temp[2] + "_" + temp[0] + "_" + temp[1];		
		return str;
	}
	
	/**
	 * 根据身份证号获取生日（18位）
	 * @param idnum
	 * @return
	 */
	public static String GetBirth(String idnum){
		String year = idnum.substring(6, 10);
		String month = idnum.substring(10, 12);
		String day = idnum.substring(12, 14);
		return year+"_"+month+"_"+day;
	}
	
}
